import { AutoGetUserInfo, GetOpenId, SignUp } from "../../utils/data/apis";
import { event } from "../../utils/interface";
import msg from "../../utils/model/msg";
import { SignUpForm } from "./interface";
import { UploadFile } from "../../utils/function/tools";

const inputItem: any = {
  '姓名': 'name', '身份证': 'idnum', '手机号': 'phone', '学校全称': 'schoolname', '年级': 'grade', '班级': 'class', '备注': 'aller', '头像': 'header', "实名头像": "header", "上传头像": "header", '简历': 'resume', '导师类型': 'type',
  '在读学历': 'education'
} // 输入内容对应字段
let signUpForm: SignUpForm; // 注册表单
// pages/sign_up/index.ts
Page({
  /**
   * 页面的初始数据
   */
  data: {
    openid: '', // OPENID
    id_flag: '', // 用户身份
    student: {
      education: '请选择', // 学历
      avatar: '', // 头像路径
    }, // 学生端数据
    teacher: {
      avatar: '',
      resume: '',
      type: '',
    }, // 导师端数据
    parent: {
      avatar: '', // 头像路径
    }, // 家长端数据
  },
  /**
   * @function 点击登录
   */
  signUp: async function() {
    // 获取微信登录状态
    let verify: boolean = true;
    msg.Loading();
    if(this.data.openid.length == 0) {
      await wx.login()
      .then(async res => {
          // 获取OPENID
          await GetOpenId({
            code: res.code
          })
          .then(async (res: any) => {
            this.setData({
              openid: res.data.openid
            })
          })
          .catch(async () => {
            msg.HideLoading();
            msg.Fail('网络错误');
            verify = false;
            return;
          })
        }) // 获取微信登录状态成功回调
    } // 判断是否有OPENID
    if(!verify) {
      return;
    }
    await signUpForm.setInfo('openid', this.data.openid)
    .catch(() => {
      msg.HideLoading();
      msg.Modal('获取OPENID失败');
    })
    signUpForm.encrypt() // 调用加密（自动验证合法性）
    .then((res: {data: string, key: string}) => {
      const modelName: string = this.options.id == 'student' ? 'Userinfo' : this.options.id == 'teacher' ? 'Teacher' : 'UserParent';
      SignUp({
        key: res.key,
        data: res.data,
        modelName: modelName
      })
      .then((res: any) => {
        msg.HideLoading();
        console.log('注册信息', res);
        if(res.data.data.msg == '注册成功') {
          msg.Success('注册成功');
          const id_flag: any = this.options.id; // 用户身份
          wx.setStorageSync('id_flag', id_flag);
          // 无感认证获取ID上传头像
          AutoGetUserInfo({
            id_flag: id_flag,
            openid: this.data.openid
          })
          .then(async (res: any) => {
            msg.Loading(`上传${id_flag == 'teacher' ? '简历' : '头像'}中`);
            const userInfo: any = res.data.data;
            // 上传图像
            console.log(userInfo);
            console.log(signUpForm.getFileTempPath());
            await UploadFile({
              tempFilePath: signUpForm.getFileTempPath()[0],
              id: userInfo.id,
              id_flag: id_flag,
              fileType: id_flag == 'teacher' ? 'pdf' : '',
            })
            .then(async (res: any) => {
              if(id_flag != 'teacher') {
                const header = `https://sanli-tracks.com${JSON.parse(res.data).allpath}`;
                userInfo.header = header; // 拼接头像链接
              }
              wx.setStorageSync('user', userInfo);
              msg.HideLoading();
              msg.Success('登录成功');
            })
            .catch(async () => {
              // 上传错误
              msg.HideLoading();
              wx.setStorageSync('user', userInfo);
              await msg.Fail('上传头像时出现错误');
            })
            // 重新加载
            wx.reLaunch({
              url: '../individual/index'
            })
          }) // 无感认证成功回调
          .catch(() => {
            msg.Fail('请求超时');
          })
          return;
        }
        // 注册出现各种问题
        msg.Modal(res.data.data.msg);
      })
      .catch(() => {
        msg.HideLoading();
        msg.Fail('注册失败')
      })
    })
    .catch((err) => {
      msg.HideLoading();
      for(var key in inputItem) {
        if(inputItem[key] == err.key) {
          msg.Modal(`请正确填写${key}`);
          return;
        }
      }
      msg.Modal(err.msg);
    })
  },
  /**
   * @function 选择学历
   */
  pickEdu: function() {
    const menu = ['小学', '初中', '高中', '大学', '硕士', '博士'];
    msg.ActionSheet(menu)
    .then((res: any) => {
      console.log(res);
      signUpForm.setInfo('education', menu[res.tapIndex]);
      this.setData({
        "student.education": menu[res.tapIndex],
      })
    })
    .catch(() => {
      // 未选择
    })
  },
  /**
   * @function 选择导师类型
   */
  pickTeacherType: function() {
    const menu = ['企业', '学校', '兼职'];
    msg.ActionSheet(menu)
    .then((res: any) => {
      this.setData({
        "teacher.type": menu[res.tapIndex],
      })
      signUpForm.setInfo('type', res.tapIndex+1);
    })
    .catch(() => {})
  },
  /**
   * @function 选择文件
   * @param e 
   */
  chooseFile: function(e: event) {
    const type = e.currentTarget.dataset.type;
    if(type == 'header') {

      wx.chooseMedia({
        count: 1,
        mediaType: ['image'],
        sourceType: ['album', 'camera'],
      })
      .then((res) => {
        let file = res.tempFiles[0].tempFilePath;
        wx.navigateTo({
          url: `./cropper/index?file=${file}`,
          events: {
            // 剪裁回调事件
            success: (data: {path: string}) => {
              console.log('剪裁后的图像路径', data.path);
              signUpForm.setInfo('header', data.path)
              .then(() => {
                msg.Success('剪裁成功');
                this.setData({
                  "student.avatar": data.path,
                  "parent.avatar": data.path
                })
              })
              .catch((err: any) => {
                msg.Fail('填充失败')
              })
              console.log(data.path);
            },
            fail: (err: any) => {
              msg.Fail('剪裁失败')
            },
          }
        }) // 跳转剪裁
      })
      .catch(() => {
        // 未选择文件
      })
      return;
    } // if 头像
    // 选择简历
    else if(type == 'resume') {
      wx.chooseMessageFile({
        count: 1,
        type: 'file',
      })
      .then((res) => {
        const tempFile = res.tempFiles[0];
        if(tempFile.name.substring(tempFile.name.lastIndexOf('.') + 1) !== 'pdf') {
          msg.Modal('请上传PDF文件', '上传失败');
          return;
        } // 检查文件类型
        signUpForm.setInfo('resume', tempFile.path);
        this.setData({
          "teacher.resume": tempFile.path,
        })
      })
      .catch(() => {})
    }
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    if(!options.id) {
      msg.Fail('Err404');
      wx.navigateBack();
      return;
    }
    this.setData({
      id_flag: options.id
    })
    signUpForm = new SignUpForm(options.id); // 新增学生表单 
  },
  /**
   * @function 监听输入事件
   */
  bindInput: function(e: event) {
    const type: string = e.detail.type;
    const key: string = inputItem[type];
    signUpForm.setInfo(key, e.detail.value); // 输入表单
  },
  /**
   * @function 监听地区选择器改变
   */
  regionChange: function(e: event) {
    signUpForm.setInfo('province', e.detail.value[0])
    signUpForm.setInfo('city', e.detail.value[1])
    signUpForm.setInfo('district', e.detail.value[2])
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})